//package com.clms.rents.aop;
//
//
//import com.alibaba.fastjson.JSON;
//import com.clms.rents.mapper.TabSysLogMapper;
//import com.clms.rents.pojo.entity.SysOperLog;
//import com.clms.rents.util.IpUtil;
//import com.clms.rents.util.WebUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.stereotype.Component;
//
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletRequest;
//import java.lang.reflect.Method;
//
///**
// * 日志切面
// *
// * @author summer.chou
// * @version V1.0
// * @date 2020年3月18日
// */
//@Aspect
//@Component
//@Slf4j
//public class LLogAspect {
//    @Lazy
//    @Resource
//    private TabSysLogMapper sysLogMapper;
//
//    private Class aClass;
//    /**
//     * 此处的切点是注解的方式
//     * 只要出现 @LogAnnotation注解都会进入
//     */
//    @Pointcut("execution(* com.clms.rents.controller.*.*(..))")
//    public void logPointCut() {
//
//    }
//
//    /**
//     * 环绕增强,相当于MethodInterceptor
//     */
//    @Around("logPointCut()")
//    public Object around(ProceedingJoinPoint point)throws Throwable {
//        long beginTime = System.currentTimeMillis();
//        //执行方法
//        Object result = point.proceed();
//        //执行时长(毫秒)
//        long time = System.currentTimeMillis() - beginTime;
//
//        //保存日志
//        try {
//            saveSysLog(point, time);
//        }catch (Exception e) {
//            log.error("sysLog,exception:{}", e, e);
//        }
//
//        return result;
//    }
//
//    /**
//     * 把日志保存
//     */
//    private void saveSysLog(ProceedingJoinPoint joinPoint,long time) {
//        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//        Method method = signature.getMethod();
//
//        SysOperLog sysLog =new SysOperLog();
//        LogAnnotation logAnnotation = method.getAnnotation(LogAnnotation.class);
//        if (logAnnotation !=null) {
//            //注解上的描述
//            sysLog.setTitle(logAnnotation.title() +"-" + logAnnotation.action());
//            //注解上的业务类型赋值给实体
//            log.info("方法的业务类型"+logAnnotation.businessType());
//            sysLog.setBusinessType(Long.parseLong(logAnnotation.businessType()));
//
//        }
//
//        //请求的方法名
//        String className = joinPoint.getTarget().getClass().getName();
//        String methodName = signature.getName();
//        sysLog.setMethod(className +"." + methodName +"()");
//        log.info("请求{}.{}耗时{}毫秒", className, methodName, time);
//        try {
//            //请求的参数
//            Object[] args = joinPoint.getArgs();
//            String params =null;
//            if (args.length !=0) {
//                params = JSON.toJSONString(args);
//            }
//
//            sysLog.setOperParam(params);
//        }catch (Exception e) {
//            log.error("sysLog,exception:{}", e, e);
//        }
//        //获取request
//        HttpServletRequest request = WebUtil.getRequest();
//        //设置IP地址
//        sysLog.setOperIp(IpUtil.getIpAddr(request));
//        log.info("Ip{}，接口地址{}，请求方式{}，入参：{}", sysLog.getOperIp(), request.getRequestURL(), request.getMethod(), sysLog.getOperParam());
//        log.info("请求Ip" + request.getRemoteAddr());
//        log.info("请求地址"+request.getRequestURI());
//        //用户名
//
//        log.info(sysLog.toString());
//        sysLogMapper.insert(sysLog);
//
//
//    }
//}
